/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.janalise.leitorpdf;

import br.com.janalise.control.MapaDoTextoController;
import br.com.janalise.model.MapaDoTexto;
import br.com.janalise.view.SplashJframe;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.util.PDFTextStripper;
import org.neodatis.odb.OID;

/**
 *
 * @author boskyn9
 */
public class Leitor {

    private File file;
    private String conteudo;
    private final SplashJframe splash;

    public String getLivro() {
        return conteudo;
    }

    public Leitor(File file,SplashJframe splash) {
        this.file = file;
        this.splash = splash;
    }

    public void run() {
        MapaDoTexto mapa;
        MapaDoTextoController mapaController = new MapaDoTextoController();
        PDFParser pdfParser = null;
        COSDocument cosDoc = null;
        PDFTextStripper pdfStripper;
        PDDocument pdDoc = null;
        PDDocumentInformation pdDocInfo;

        splash.log.setText(getNome(file.getName()));
        splash.barLeitor.setValue(0);

        mapa = mapaController.findByNome(getNome(file.getName()));
         if(mapa == null){
             mapa = new MapaDoTexto();
             System.out.println("entrei "+getNome(file.getName()));
            try {
                pdfParser = new PDFParser(new FileInputStream(file));
            } catch (Exception e) {
                System.out.println("Unable to open PDF Parser.");
            }

            try {
                pdfParser.parse();
                cosDoc = pdfParser.getDocument();
                pdfStripper = new PDFTextStripper();
                pdDoc = new PDDocument(cosDoc);
                pdDocInfo = pdDoc.getDocumentInformation();
                pdDoc.getDocumentInformation();

             if(pdDocInfo!=null) {
                 mapa.setAutor(pdDocInfo.getAuthor());
                 mapa.setTitulo(pdDocInfo.getTitle());
             }
             conteudo = pdfStripper.getText(pdDoc);

            } catch (Exception e) {
                System.out.println("[LeitorPDF]An exception occured in parsing the PDF Document.");
                e.printStackTrace();
                try {
                    if (cosDoc != null) {
                        cosDoc.close();
                    }
                    if (pdDoc != null) {
                        pdDoc.close();
                    }
                } catch (Exception e1) {
                    e.printStackTrace();
                }
            }finally{
                try {
                    cosDoc.close();
                } catch (IOException ex) {
                    System.err.println("[Leitor]Erro ao fechar o COSDocument");
                }
                try {
                    pdDoc.close();
                } catch (IOException ex) {
                    System.err.println("[Leitor]Erro ao fechar o PDDocument");
                }
            }
                mapa.setConteudo(conteudo);
                mapa.setPath(file.getAbsolutePath());
                mapa.setNome(getNome(file.getName()));
                OID oid = mapaController.save(mapa);
                if(oid!=null){
                    mapa = mapaController.findByOid(oid);
                }
         }
    }

    private String getNome(String nome) {
        String[] str = nome.split("\\.");
        return str[0];
    }
}
